// #include <stdio.h>//输出小于等于n的素数存放在一个数组里，每5个一行
// int pdss(int n)
// {
//   for(int i=2;i*i<=n;i++)
//     {
//       if(n%i==0)
//         {
//           return 0;
//         }
//     }
//   return 1;
// }
// int fun(int arr[1000],int n)
// {
//   int k=0;
//   for(int i=2;i<=n;i++)
//     {
//       if(pdss(i))
//         {
//           arr[k++]=i;
//         }
//     }
//     return k;
// }
// int main()
// {
//   int n;
//   scanf("%d",&n);
//   int arr[1000];
//   int k=fun(arr,n);
//   int count=0;
//   printf("小于等于%d的素数有:\n",n);
//   for(int i=0;i<k;i++)
//   {
//     printf("%d    ",arr[i]);
//     count++;
//     if(count%5==0)
//     {
//         printf("\n");
//     }
//   }
//   return 0;
// }



// #include <stdio.h>
// void fun(int arr1[3][4],int arr2[4])
// {
//   for(int j=0;j<4;j++)
//   {
//     arr2[j]=arr1[0][j];
//     for(int i=0;i<3;i++)
//     {
//       if(arr1[i][j]<arr2[j])
//       {
//         arr2[j]=arr1[i][j];
//       }
//     }
//   }
// }
// int main()
// {
//   int arr1[3][4]={1,12,13,14,5,6,9,7,6,2,4,8};
//   int arr2[4];
//   fun(arr1,arr2);
//   printf("数组为:\n");
//   for(int j=0;j<3;j++)
//   {
//     for(int i=0;i<4;i++)
//     {
//       printf("%d    ",arr1[j][i]);
//     }
//     printf("\n");
//   }
//   printf("每列最小值为:\n");
//   for(int i=0;i<4;i++)
//   {
//     printf("%d    ",arr2[i]);
//   }
//   return 0;
// }




// #include <stdio.h>//输出3*4数组每列最小值，存放在一个数组里
// void fun(int arr1[3][4],int arr2[4])
// {
//   for(int j=0;j<4;j++)
//   {
//     arr2[j]=arr1[0][j];
//     for(int i=0;i<3;i++)
//     {
//       if(arr1[i][j]<arr2[j])
//       {
//         arr2[j]=arr1[i][j];
//       }
//     }
//   }
// }
// int main()
// {
//   int arr1[3][4]={1,12,13,14,5,6,9,7,6,2,4,8};
//   int arr2[4];
//   fun(arr1,arr2);
//   printf("数组为：\n");
//   for(int i=0;i<3;i++)
//   {
//     for(int j=0;j<4;j++)
//     {
//       printf("%d    ",arr1[i][j]);
//     }
//     printf("\n");
//   }
//   printf("每列最小值为：\n");
//   for(int i=0;i<4;i++)
//   {
//     printf("%d    ",arr2[i]);
//   }
//   return 0;
// }



#include <stdio.h>
#include <math.h>
double euclideanDistance(double a, double b) {
    return sqrt(pow(a - b, 2));
}
int knnVoting(double features[], int labels[], int n, double testPoint, int k) {
    double distances[100];
    int sortedIndices[100];
    for (int i = 0; i < n; i++) {
        distances[i] = euclideanDistance(features[i], testPoint);
        sortedIndices[i] = i;
    }
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (distances[sortedIndices[j]] > distances[sortedIndices[j + 1]]) {
                int temp = sortedIndices[j];
                sortedIndices[j] = sortedIndices[j + 1];
                sortedIndices[j + 1] = temp;
            }
        }
    }
    int count0 = 0, count1 = 0;
    for (int i = 0; i < k; i++) {
        int index = sortedIndices[i];
        if (labels[index] == 0) {
            count0++;
        } else {
            count1++;
        }
    }
    return (count0 > count1) ? 0 : 1;
}
int main() {
    double features[] = {2, 3, 5, 7, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5};
    int labels[] = {0, 1, 0, 1, 0, 1, 1, 1, 0, 1};
    int n = sizeof(features) / sizeof(features[0]);
    int k = 4;
    double testPoint;
    scanf("%lf", &testPoint);
    int predictedLabel = knnVoting(features, labels, n, testPoint, k);
    printf("预测的类别是: %d\n", predictedLabel);
    return 0;
}